約 3,782,939 件
https://w.atwiki.jp/hirokidaichi/pages/15.html
JavaScriptの備忘録 JavaScriptの備忘録 JavaScriptの備忘録--環境編--ライノ ブラウザ Greasemonkey Firefoxブラウザ拡張 WSH Jscript Jscript.net HTA Bookmarklet JavaScriptの備忘録--変数編-- JavaScriptの備忘録--スコープチェイン-- JavaScriptの備忘録--制御構文--if else for while foreach try catch with function() JavaScriptの備忘録--DOM編-- JavaScriptの備忘録--XPath編-- JavaScriptの備忘録--Ajax/Sjax編-- JavaScriptの備忘録--ライブラリ編--Prototype.js jQuery AFlax JavaScriptの備忘録--COM/ActiveX編-- JavaScriptの備忘録--Jscript.net編-- JavaScriptの備忘録--バッドノウハウ編-- JavaScriptの備忘録--環境編-- ライノ ブラウザ Greasemonkey Firefoxブラウザ拡張 WSH Jscript Jscript.net HTA Bookmarklet JavaScriptの備忘録--変数編-- JavaScriptの備忘録--スコープチェイン-- JavaScriptの備忘録--制御構文-- if else for while foreach try catch with function(){} JavaScriptの備忘録--DOM編-- JavaScriptの備忘録--XPath編-- JavaScriptの備忘録--Ajax/Sjax編-- JavaScriptの備忘録--ライブラリ編-- Prototype.js jQuery AFlax JavaScriptの備忘録--COM/ActiveX編-- JavaScriptの備忘録--Jscript.net編-- JavaScriptの備忘録--バッドノウハウ編--
https://w.atwiki.jp/gta_sa/pages/35.html
Super CJ Download [インストール] 1.解凍し、MAIN.SCM・SCRIPT.IMGを入れ替える。 (.../Program Files/Rockster Games/GTA San Andreas/data/script) ※バックアップを忘れずに。 [使い方] Super CJのReadMe.txtを見てください。 San Andreas Car Spawn このSan Andreas Car Spawnは、好きな乗り物を目の前に出すことができます。 Download [インストール] 1.解凍し、MAIN.SCMを入れ替える。 (.../Program Files/Rockster Games/GTA San Andreas/data/script) 2.完成(New Gameで始めること。) 3.CrouchとSprintを同時押し。 4.車名が出るので、Previous TargetかNext Targetで選ぶ。 5.Walk Forwardで出現させる。もう一度Walk Forwardを押すと色が変わる。 6.終わるときはもう一度CrouchとSprintを同時押し。 ※SANGAを取り込んでいます。 全てのステータスがMAX(なっていないのもある) すべての街へのLockが解除される すべてのサブミッションが可能 始めからすべての店が利用可能 始めからすべての駐車されている乗り物が利用可能 すべての武器がはじめから買える 始めからギャング・ウォーズが可能 ※バックアップを忘れずに。 Hot Coffee Mod Download [インストール] 1.解凍し、MAIN.SCM・SCRIPT.IMGを入れ替える。 (.../Program Files/Rockster Games/GTA San Andreas/data/script) ※バックアップを忘れずに。 sacensorの使い方 このファイルは以前のセーブデータでもセックス可能にするパッチです。 念のためセーブデータをバックアップしておくといいでしょう 1.セックスしたいセーブデータをsacensor.exeにドラッグ ドロップ 2.Flip censor status (Y/N)? と出るので、yを入力しEnter 3.Press Enter to quit... と出たらEnterを押して終了。
https://w.atwiki.jp/blenderwiki/pages/41.html
2.5での注意点 2.49以前はダウンロードしたpythonのファイルをpythonのLibフォルダに入れるだけで使えたが,2.5 からはpythonのファイルをscript addonesに入れたあと、UserPreferencesのAdd-oneに行く。 ここでファイルを入れたなら該当するScriptが表示されるのでチェックを入れる。下に表示されるinstall Add-oneから入れることもできる。Scriptを使いたくなければチェックを外せばよい。 まだβ版なので自己責任でお願いします。詳しくは blender.jpのリリースノート をどうぞ。使うときは名前の左の三角を押すとどこにあるのかなどがわかる。 おすすめScript一覧2.5rigify fracture cloud Generator Surface Sketch Dynamic Special Menu Torus Knots Material Utils 2.49Suicidator City Generator 注目のβ版scriptBlendText Curve to Uniform Mesh Pythonを学ぶ Scriptを探すときは Blender 2.5 Scripts Catalog からどうぞ。 blenderのアドオンやらプラグインなど アドオンなどが画像ありで紹介してあります。 おすすめScript一覧 2.5 Simplify Animation Curves Tip Simplify Animation Curves アドオンを使ってアニメーションを自動で調整できます。 rigify rigの設定を自動で行うscript。使い方は How to Use Rigify in Blender2.5 がかなり分かりやすいです。 は日本語なのでいいかも。 fracture モノが壊れる様子を再現するスクリプト。チュートリアルは こちら リンク先の画面が大きい時は右クリックですべて表示にすると全体が見れます。 blenderArtist からの紹介。 2/3 3/3 cloud Generator アドオンでチェックが入っているなら、オブジェクトをアクティブにしたあと左にあるObject toolsの下の方に[Generate Cloud]があるのでクリック。解除するにはオブジェクトの外枠を選択して左の[DeGenerate]をクリックする。βではまだ複数はできないみたい。 Blender Tutorial 2.55 The CloudGenerator CloudGeneratorの簡単な使い方です。 Surface Sketch greace pencilで書いた線をmeshにする。すごく面白い機能。 使い方は blenderArtists をどうぞ Dynamic Special Menu 2.49ぽくスペースバーを押すと、よく使うショートカットがまとめられているので便利。 Torus Knots 曲線を使った複雑な物が作れます。詳しくは Torus Knot Plus Add-on for Blender 2.5 を見てください。 Material Utils Qkeyを押すとメニューが出るのでMaterialなどの設定がしやすい。ちょっと便利。 2.49 Suicidator City Generator 簡単に街を作るスクリプト。使い方としては、 ダウンロードしたファイル を2.49で開く。次にテキストエディタ上で[Alt+P]を押す。GUIが現れるのでいろいろと値を調整して、「Create city]を押すと街ができます。2.5にも対応予定とのこと。 注目のβ版script まだβ版なので機能しないこともあります。 BlendText 動画+マニュアルは BlendText v01e (IPO and Spotlight Support) です。複雑なテキストアニメーションが簡単にできます。項目が多いですがその分出来ることは多いです。現在は こちら で配布してるファイルから試してみることができます。動きをつけるにはemptyを追加して動かしてください。2.49対応で2.5ではまだ無理みたいです。 Curve to Uniform Mesh 標準の機能より綺麗にメッシュに変換できるscript。ダウンロードは こちら から。 使うには2.55βでもバージョンがr33530以上じゃないとscriptが機能しないと思います。PasteAllのサイトにあるpythonの右のアイコンをクリックすると、クリップボードにコードがコピーされるのでメモ帳かエディタに貼って.pyの拡張子のファイルを作ってアドオンを読み込みます。Densityで頂点の数を調整できます。 Pythonを学ぶ blenderでpythonを学びたいときは Extensions Py/Scripts から勉強するといいと思います。 Pythonのお勉強 pythonの日本語での情報がまとめられています。 scriptの基本は Blender 2.5 Python コードサンプル集 の一番下にあるリンクのPDFが分かりやすいです。ただし英語です。 blenderscripts s videos script関連の動画がまとまってます。 Creating an Add Mesh Primitives Panel in the Tool Shelf scriptを書こうと思ってる方におすすめです。基本から説明があるので左のtoolに表示する方法などがわかります。 Blender Tutorial - Show Mouse Cursor ゲームエンジンの時にマウスカーソルを表示させる方法。pythonのscript入門におすすめです。 上に戻る
https://w.atwiki.jp/sevenlives/pages/2594.html
V8 SpiderMonkey JavaScriptCore JScript Charakan?
https://w.atwiki.jp/aias-jsstyleguide2/pages/13.html
JavaScriptの言語仕様に関するルール 各項目の左側にある三角ボタンで、詳細情報の表示・非表示を切り替えられます。また下のボタンを使うと全項目を一度に変更することができます。 全て切り替える var 常に、varと共に変数を宣言します。 varの指定がない場合、変数はグローバルコンテキストに置かれ、既存の値を上書きする可能性があります。またもし宣言そのものがなければ、その変数のスコープがどこにあるのか分かりにくくなります(その変数はローカルスコープと同じように、DocumentやWindowの中に存在していてもよいのです)。従って常にvarと共に変数を宣言してください。 定数 定数値にはNAMES_LIKE_THISのような名前をつけます。 変数やプロパティの参照先が固定されている(上書きできない)ことを示すには、@constを使います。 Internet Explorerがサポートしないconst キーワードは決して使いません。 定数値 ある値を一定で変化しないものとして扱いたい場合、名前をCONSTANT_VALUE_CASE.ALL_CAPSのように全て大文字にし、さらに@constによって上書きできないことを示してください。 プリミティブ型(number、string、boolean)はもともと定数値です。 オブジェクトの不変性の判断は、より主観的です - 観察可能な状態変化が起きていない場合のみ、オブジェクトは不変とみなされるべきです。ただしCompilerはこの考え方を強制しません。 (変数・プロパティへの)定数ポインタ 変数やプロパティに付けられた@constアノテーションは、それらを上書きできないことを表します。この規則はCompilerによるビルド時に強制されます。またこの動作はconst キーワードとも矛盾しません。(Internet Explorerがサポートしないため、constキーワードは使いませんが。) メソッドに付けられた@constアノテーションは、サブクラスがそのメソッドをオーバーライドできないことを表します。 コンストラクタに付けられた@constアノテーションは、そのクラスをサブクラス化できないことを表します。(Javaにおける@finalと同じです) 例 @constは、(CONSTANT_VALUES_CASE形式の名前のように)変数の値そのものが一定であることを必ずしも意味しません。一方CONSTANT_VALUES_CASE形式の名前は@constの示す内容を内包しています。 /** * ミリ秒単位のリクエストタイムアウト時間 * @type {number} */ goog.example.TIMEOUT_IN_MILLISECONDS = 60; 大文字だけの名前は@constの内容を含むため、この秒数は定数です。値の上書きはできません。 オープンソースのコンパイラは@constがついていないシンボルの上書きを許容すると思われます。 /** * 文字列を返すURLのマップ * @const */ MyClass.fetchedUrlCache_ = new goog.structs.Map(); /** * サブクラス化できないクラス * @const * @constructor */ sloth.MyFinalClass = function() {}; このケースではプロパティ値であるオブジェクトは上書きされませんが、オブジェクトの値は頻繁に変化し一定ではありません。(このため名前には大文字ではなくキャメルケースが使われています) セミコロン 常にセミコロンを使います。 暗黙的なセミコロンの挿入に依存することは、微妙な、デバッグしにくい問題を引き起こします。もっと良い方法を選びましょう。 次のコードのセミコロンの無い箇所は、その危険性を示す典型的な例です // 1. MyClass.prototype.myMethod = function() { return 42; } // ここにはセミコロンがありません。 (function() { // ローカルスコープを生成する関数の中に書かれた初期化処理。 })(); var x = { i 1, j 2 } // ここにはセミコロンがありません。 // 2. Internet ExplorerかFirefoxかによって処理を振り分けます。 // こんなコードは書かないとは思いますが、とりあえずお許しを。 [ffVersion, ieVersion][isIE](); var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // ここにはセミコロンがありません。 // 3. bash風の条件分岐。 -1 == resultOfOperation() || die(); 何が起きるか? JavaScriptエラー - 先ず、42を返す関数が2番目の関数を引数として実行されます。次に42が "コール" され、数字なのでエラーが発生します。 x[ffVersion, ieVersion][isIE]()を実行しようとしたランタイムから、おそらく undefined にはそのようなプロパティはありません という風なエラーが返されます。 配列マイナス1はNaNとなり、NaNはどんな値とも一致しないため必ずdie()が呼び出されます(たとえresultOfOperation()の戻り値がNaNだったとしても)。THINGS_TO_EATにはdie()の戻り値が代入されます。 なぜ? その存在が安全に推測される場合を除き、JavaScriptは文(statement)の末尾にセミコロンを要求します。上の各例では、関数宣言、オブジェクト、配列リテラルは1つの文の内側にいると見なされています。閉じ括弧は文の終了を表すには不十分です。JavaScriptは中置演算子(+、-など)や括弧では決して文を終了させません。 このことは本当に人々を驚かせます。従って文の末尾は確実にセミコロンで終わらせるべきです。 セミコロンと関数について 関数式の後ろにはセミコロンを付けますが、関数宣言の後ろには付けません。その違いを示す非常に分かりやすい例がこれです var foo = function() { return true; }; // ここにはセミコロンを付けます function foo() { return true; } // ここにはセミコロンを付けません ネストされた関数 使えます。 ネストされた関数は、例えば継続(continuation)の生成やヘルパー関数の隠蔽を行う際に、とても役立ちます。遠慮なく使いましょう。 ブロック内での関数宣言 使わないでください。 次のように書いてはいけません if (x) { function foo() {} } ほとんどのスクリプトエンジンはブロック内での関数宣言をサポートしていますが、それはECMAScript(ECMA-262,13及び14項を参照)の仕様には含まれていません。各エンジンの実装は、互いの間でも将来のECMAScriptに対しても、一貫性が保証されていません。ECMAScriptは関数の宣言をスクリプトのトップレベルか関数内のスコープでのみ許しています。代わりに変数へ関数を代入すれば、ブロック内でも関数を定義することが可能です if (x) { var foo = function() {}; } 例外 使えます。 もし自明でない何かを行うのであれば(アプリケーション開発フレームワークの利用など)、基本的に例外は避けられません。使いましょう。 独自の例外 使えます。 独自の例外を使わない場合、何かの値を返す関数が更にエラー情報も返そうとすると、その方法はトリッキーかつエレガントでないものになりそうです。戻り値をエラー情報への参照にするか、あるいはエラー情報をメンバに持つオブジェクトに変えることになるでしょう。これらは本質的に、原始的な例外ハンドリングのハックと言えます。必要であればどんどん独自の例外を使ってください。 標準機能 標準機能は非標準の機能よりも常に優先されます。 移植性と互換性を最大化するため、常に標準化された機能の方を選択してください。(例えばstring[3]ではなく string.charAt(3)を、DOM要素へのアクセスには特定のアプリケーションが提供する簡略化された機能ではなく、DOMの標準機能を使います) プリミティブ型のラッパーオブジェクト 使わないでください。 プリミティブ型のラッパーオブジェクトは使う理由がないだけでなく、危険ですらあります var x = new Boolean(false); if (x) { alert( hi ); // hi と表示されます。 } このようにしてはいけません! ただし、型のキャストに使うのは全く問題ありません var x = Boolean(0); if (x) { alert( hi ); // これは決してアラートされません。 } typeof Boolean(0) == boolean ; typeof new Boolean(0) == object ; これは何らかのデータを数値、文字列、論理値に変換するにはとても良い方法です。 多段階のプロトタイプ階層 好ましくありません。 多段階のプロトタイプ階層はJavaScriptが実装する継承手法です。ユーザ定義クラス D のプロトタイプを別のユーザ定義クラス B にすると多段階の階層構造が作れます。しかしこれらの階層構造を正しく把握しておくのは、最初の状態と比べるとかなり難しいことです。 このため、継承にはClosure Libraryのgoog.inherits()のようなライブラリ関数を使うのが最善です。 function D() { goog.base(this) } goog.inherits(D, B); D.prototype.method = function() { ... }; メソッドとプロパティの定義 /** @constructor */ function SomeConstructor() { this.someProperty = 1; } Foo.prototype.someMethod = function() { ... }; "new"によって生成されるオブジェクトにメソッドやプロパティを付け加えるにはいくつかの方法がありますが、メソッドではこのスタイルが推奨されます Foo.prototype.bar = function() { /* ... */ }; その他のプロパティでは、コンストラクタの中で初期化を行うスタイルが推奨されます /** @constructor */ function Foo() { this.bar = value; } なぜ? 現在のJavaScriptエンジンは、オブジェクトをその「形状」に基いて最適化します。プロパティの追加(プロトタイプに設定された値のオーバーライドも含まれます)はオブジェクトの形状を変化させ、パフォーマンスの低下をもたらします。 delete より好ましいのは this.foo = null の方です。 Foo.prototype.dispose = function() { delete this.property_; }; ではなく、こう書きましょう Foo.prototype.dispose = function() { this.property_ = null; }; 現代のJavaScriptエンジンにおいて、プロパティの数を増減させる処理は、値の再割り当てに比べはるかに低速です。次の場合を除き、deleteキーワードは避けるべきです。 プロパティ名をキーとする反復処理を行なっており、そのキーを削除する必要があるとき if (key in obj)の結果を変更する必要があるとき クロージャ 使えます、しかし慎重に。 クロージャを作成できる能力は、おそらく最も役に立つ、しかししばしば見落とされているJSの特長です。クロージャの動作についての良い解説はこちらをご覧ください。 しかし1つ覚えておいて欲しいのは、クロージャは自身を取り囲むスコープへのポインタを保持しているという点です。このためクロージャをDOM要素ヘ結びつけると、循環参照が発生しメモリリークとなることがあります。例えば次のコードです function foo(element, a, b) { element.onclick = function() { /* a と b を使う */ }; } クロージャ関数は element、a、bへの参照を持っています。elementを使わないとしてもです。elementもまたクロージャへの参照を保持しており、そこでガーベジコレクションが回収できない循環ができてしまっています。この状況では、コードは次のように構成されるべきです function foo(element, a, b) { element.onclick = bar(a, b); } function bar(a, b) { return function() { /* a と b を使う */ }; } eval() コードローダまたはREPL(Read-eval-print loop)にのみ使います。 eval()はセマンティクスに混乱を引き起こします。またユーザの入力を含む文字列をeval()することは危険な行為です。たいていはもっと適切、明確、安全なコードの書き方が存在するため、通常その利用は許容されません。 JSONを用いたRPCの際、データの解釈にはeval()の代わりにJSON.parse()を使います。 以下のような結果を返すサーバがあるとします { "name" "Alice", "id" 31502, "email" "looking_glass@example.com" } var userInfo = eval(feed); var email = userInfo[ email ]; 配信データが悪意あるJavaScriptコードを含むものに改変されていたとして、eval()を使っていたらコードはそのまま実行されてしまうでしょう。 var userInfo = JSON.parse(feed); var email = userInfo[ email ]; JSON.parse()を使うと、(全ての実行可能なJavaScriptを含む)不正なJSONに対して例外が発生します。 with() {} 使わないでください。 withの使用はプログラムのセマンティクスを曇らせます。withで指定されたオブジェクトはローカル変数と衝突するようなプロパティを持てるため、プログラムの意図が大きく変えられてしまうおそれがあります。例えばこのコードでは何が起きるでしょうか? with (foo) { var x = 3; return x; } 答えは「あらゆることが起きる」です。ローカル変数xはfooのプロパティに乗っ取られます。もしxがsetterだった場合、3の代入は他の多くのコードを実行させる原因となりえます。withを使ってはいけません。 this オブジェクトのコンストラクタとメソッド、クロージャの作成時にのみ使います。 thisのセマンティクスは扱いが難しく、場合によってその参照先はグローバルオブジェクト(ほとんどはこれです)、呼び出し元のスコープ(eval内)、DOMツリー内のノード(要素に追加されたHTMLイベントハンドラ内)、新しく生成されたオブジェクト(コンストラクタ内)、何か他のオブジェクト(call()またはapply()された関数内)と変化します。 thisは容易に間違いの原因になってしまうので、本当に必要な次の場面だけに使用を限定します。 コンストラクタの中 オブジェクトのメソッドの中(クロージャの作成時を含む) for-in ループ オブジェクト / マップ / ハッシュ内をキーによって走査する場合のみ使えます。 for-inループはしばしば 配列(Array)内の要素をループ処理するという、間違った使い方をされています。for-inループは 0からlength-1までをループするのではなく、オブジェクトとそのプロトタイプチェーンに存在するキーを走査するものです。従ってそのような使い方はエラーを起こしがちです。失敗例をいくつか示します function printArray(arr) { for (var key in arr) { print(arr[key]); } } printArray([0,1,2,3]); // これは動作します。 var a = new Array(10); printArray(a); // これは正しくありません。 a = document.getElementsByTagName( * ); printArray(a); // これは正しくありません。 a = [0,1,2,3]; a.buhu = wine ; printArray(a); // これも正しくありません。 a = new Array; a[3] = 3; printArray(a); // これも正しくありません。 配列のループには必ず通常のfor文を使ってください。 function printArray(arr) { var l = arr.length; for (var i = 0; i l; i++) { print(arr[i]); } } 連想配列 決してArrayをマップ / ハッシュ / 連想配列として使わないでください。 Arrayを連想配列として使うことは許されていません..もっと正確に言えば、数字インデックス以外で配列要素にアクセスすることは許されていません。もしマップやハッシュが必要なのであれば、Arrayの代わりにObjectを使いましょう。実際、連想配列に求められている機能はArrayではなくObjectに実装されており、ArrayはただObjectを拡張しているに過ぎません(その他のJSの全てのオブジェクト、つまり Date、RegExp、Stringなども同様です)。 複数行の文字列リテラル 使わないでください。 このような書き方は禁止です var myString = A rather long string of English text, an error message \ actually that just keeps going and going -- an error \ message to make the Energizer bunny blush (right through \ those Schwarzenegger shades)! Where was I? Oh yes, \ you\ ve got an error and all the extraneous whitespace is \ just gravy. Have a nice day. ; 各行の先頭にある空白はコンパイル時にも安全に取り除かれることはなく、バックスラッシュ(\)の後ろの空白は分かりにくいエラーをもたらします。またこの記法はほとんどのエンジンでサポートされているとはいえ、ECMAScriptの標準ではありません。 代わりに、文字列の結合を使ってください var myString = A rather long string of English text, an error message + actually that just keeps going and going -- an error + message to make the Energizer bunny blush (right through + those Schwarzenegger shades)! Where was I? Oh yes, + you\ ve got an error and all the extraneous whitespace is + just gravy. Have a nice day. ; 配列リテラルとオブジェクトリテラル 使えます。 ArrayとObjectのコンストラクタではなく、配列リテラルとオブジェクトリテラルを使って下さい。 Arrayコンストラクタの引数はエラーの原因になりがちです // 配列の長さは3。 var a1 = new Array(x1, x2, x3); // 配列の長さは2。 var a2 = new Array(x1, x2); // もし x1 が自然数であれば、配列の長さは x1 になります。 // もし x1 が数値でかつ自然数でなければ、例外が発生します。 // それ以外なら、配列は x1 を値とする長さ1の配列になります。 var a3 = new Array(x1); // 配列の長さは0。 var a4 = new Array(); このため、誰かが引数の数を2つから1つに変更すると、その配列の長さは想定と合わなくなる可能性があります。 これらの奇妙な事例は、より可読性の高い配列リテラルを使用することで避けられます var a = [x1, x2, x3]; var a2 = [x1, x2]; var a3 = [x1]; var a4 = []; Objectコストラクタには同じ問題はありませんが、可読性と一貫性の面からオブジェクトリテラルを使うべきです var o = new Object(); var o2 = new Object(); o2.a = 0; o2.b = 1; o2.c = 2; o2[ strange key ] = 3; 上は、こう書かれるべきです var o = {}; var o2 = { a 0, b 1, c 2, strange key 3 }; 組込みオブジェクトのプロトタイプの書き換え しないでください。 Object.prototypeやArray.prototypeのような組込みオブジェクトのプロトタイプを書き換えることは、固く禁じます。同じ組込みであってもFunction.prototypeなどはそれほど危険ではありませんが、それでもデバッグの難しい問題を引き起こす可能性があります。よって書き換えは避けるべきです。 Internet Explorerの条件付きコメント 使わないでください。 これは禁止です var f = function () { /*@cc_on if (@_jscript) { return 2* @*/ 3; /*@ } @*/ }; 条件付きコメントはライタイムのJavaScriptシンタックス・ツリーを改変してしまうので、ツールによる自動化の妨げになります。
https://w.atwiki.jp/aias-jsstyleguide2/pages/17.html
JavaScriptのデータ型 JSDocへのデータ型の記述は、できるだけ具体的かつ正確に行ってください。我々のサポートする型のスタイルはEcmaScript 4 仕様に基づいています。 JavaScriptの型言語 ES4の提案にはJavaScriptのデータ型を定義する言語が含まれていました。この言語をJSDoc内で用い、関数パラメータや戻り値の型を表現します。 ES4提案の進展に伴い、その型言語も変化しています。Compilerは古い構文もサポートしていますが、現在それらは非推奨となっています。 構文名 構文 説明 非推奨の構文 Primitive Type JavaScriptに含まれる5種類のプリミティブ型 {null}, {undefined}, {boolean}, {number}, {string} シンプルな型名称 Instance Type {Object}Objectのインスタンスもしくはnull{Function}Functonのインスタンスもしくはnull{EventTarget}EventTargetインタフェースを実装するコンストラクタのインスタンスもしくはnull コンストラクタまたはインタフェースのインスタンスであることを表します。コンストラクタ関数は@cpnstructorJSDocタグによって定義されます。インタフェース関数は@interfaceJSDocタグによって定義されます。デフォルトで、Instance Typeはnullを許可します。このタイプはnullを許す唯一のものです。この表に含まれる他の構文はデフォルトでnullを許可しません。 Enum Type {goog.events.EventType}goog.events.EventTypeの列挙値で初期化されたオブジェクトリテラルのプロパティのどれか 列挙型の変数はオブジェクトリテラルもしくは他の列挙型変数の別名で、@enumJSDocタグがアノテートされていなければなりません。このオブジェクトリテラルのプロパティが、列挙値の実体となります。列挙型の構文についてはこちらで定義されています。注意:この型は、我々の型システムのうちES4仕様に含まれない数少ないもののひとつです。 Type Application {Array. string }文字列の配列{Object. string, number }キーが文字列、値が数値のオブジェクト 型引数のセットを付記し、型をパラメータ化します。考え方はJavaのジェネリクスによく似ています。 Type Union {(number|boolean)}数値または論理値 値の型がAまたはBであることを表します。この型が最上位の式で使われる場合、丸括弧は省略しても構いません。しかしそうでない場合は、曖昧さを避けるために丸括弧を付けてください。{number|boolean}{function() (number|boolean)} {(number,boolean)}, {(number||boolean)} Nullable Type {?number}数値またはNULL。 Unionの省略形で、何らかの型もしくはnullであることを表します。この型は糖衣構文です。 {number?} Non-nullable Type {!Object}Object型ですが、nullは許されません。 この型がnullを許容しないことを表します。殆どの場合、デフォルトでnullを許すInstance Typeに対して使用されます。 {Object!} Record Type {{myNum number, myObject}}型指定されたメンバを持つ無名オブジェクト 値が指定された型のメンバを持つオブジェクトであることを表します。左のケースでは、myNumは数値、myObjectはどの型でも取れるプロパティです。波括弧は構文の一部であることに注意してください。例えばArrayがlengthというプロパティを持つオブジェクトの配列であることを示すには、Array. {length} のように書きます。 Function Type {function(string, boolean)}2つの引数(文字列と論理値)を取り、戻り値が指定されていない関数。 関数を定義します。 Function Return Type {function() number}引数を取らず、数値を戻り値として返す関数。 関数の戻り値の型を定義します。 Function this Type {function(this goog.ui.Menu, string)}文字列の引数1つをとり、goog.ui.Menuのコンテキストで実行される関数。 関数のコンテキストの型を定義します。 Function new Type {function(new goog.ui.Menu, string)}文字列の引数を1つ取るコンストラクタ関数。 new キーワードと共にコールされるときにはgoog.ui.Menuのインスタンスを生成します。 コンストラクタによって作成される型を定義します。 Variable arguments {function(string, ...[number]) number}引数として文字列を1つと、可変個数の数値を取る関数。 関数に個数の変化する引数を定義します。 Variable arguments (in @param annotations) @param {...number} var_args可変個数の引数を取るようアノテートされた関数。 可変個数の引数を受け取れるようアノテートされた関数を定義します。 Function optional arguments {function(?string=, number=)}省略可能な、nullでもよい文字列型の引数と、省略可能な数値型の引数を取る関数。=は関数型の宣言の中でのみ使います。 関数の省略可能な引数を定義します。 Function optional arguments (in @param annotations) @param {number=} opt_argument数値型の省略可能なパラメータ。 省略可能な引数を受け取れるようアノテートされた関数を定義します。 The ALL Type {*} その変数がどのような型でも取れることを表します。 The UNKNOWN Type {?} その変数がどのような型でも取れ、Compilerはそれを使った型チェックを行ってはならないことを表します。 JavaScriptで使えるデータ型 型名の例 値の例 説明 number 11.0-51e5Math.PI Number new Number(true) Numberオブジェクト string Hello "World"String(42) 文字列値 String new String( Hello )new String(42) Stringオブジェクト boolean truefalseBoolean(0) 論理値 Boolean new Boolean(true) Booleanオブジェクト RegExp new RegExp( hello )/world/g Date new Datenew Date() null null undefined undefined void function f() { return;} 戻り値なし Array [ foo , 0.3, null][] 型指定のない配列 Array. number [11, 22, 33] 数値の配列 Array. Array. string [[ one , two , three ], [ foo , bar ]] 文字列の配列の配列 Object {}{foo abc , bar 123, baz null} Object. string { foo bar } 文字列の値を持つオブジェクト Object. number, string var obj = {};obj[1] = bar ; キーが数値で値が文字列のオブジェクト。JavaScriptではオブジェクトのキーは暗黙的に文字列に変換される点に注意してください。従ってobj[ 1 ] == obj[1]です。また for...in ループの中でもキーは常に文字列です。しかしCompilerはオブジェクトのキーをインデックス化する際、その型を識別します。 Function function(x, y) { return x * y;} Functionオブジェクト function(number, number) number function(x, y) { return x * y;} 関数 SomeClass /** @constructor */function SomeClass() {}new SomeClass(); SomeInterface /** @interface */function SomeInterface() {}SomeInterface.prototype.draw = function() {}; project.MyClass /** @constructor */project.MyClass = function () {}new project.MyClass() project.MyEnum /** @enum {string} */project.MyEnum = { /** 青色 */ BLUE #0000dd , /** 赤色 */ RED #dd0000 }; 列挙型列挙値に対するJSDocコメントは省略可能です。 Element document.createElement( div ) DOM要素 Node document.body.firstChild DOMノード HTMLInputElement htmlDocument.getElementsByTagName( input )[0] DOM要素の型を明示的に指定します。 型キャスト ある式のデータ型を型チェック機能が正確に推測できないケースでは、型キャストコメントを利用できます。型キャストコメントには@typeアノテーションでデータ型を示し、式は丸括弧で括ります。丸括弧は必須です。 /** @type {number} */ (x) そのパラメータ・プロパティは「Nullを許す」のか「省略できる」のか JavaScriptは型に厳格でない言語なので、関数パラメータやクラスプロパティにおける「nullを許す」、「省略できる」、「undefined」の微妙な違いを理解しておくことは非常に重要です。 クラスとインタフェースのインスタンスはデフォルトでnullを許します。例として、以下の宣言をみてください /** * 何かのクラス、何らかの値で初期化されます。 * @param {Object} value 何かの値。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {Object} * @private */ this.myValue_ = value; } 上のコードはCompilerに対し、myValue_プロパティが値として持つのはオブジェクトかnullのどちらかだと伝えています。もし myValue_プロパティが決してnullとならないのなら、こう宣言されるべきです /** * 何かのクラス、nullでない何らかの値で初期化されます。 * @param {!Object} value 何かの値。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {!Object} * @private */ this.myValue_ = value; } この場合、もしコードのどこかでMyClassがnull値で初期化されていることをCompilerが検出すると、Compilerから警告が発せられます。 省略されたパラメータはおそらくランタイムによってundefinedとして扱われます。それらがオブジェクトのプロパティに代入されるのであれば、プロパティもまたそれに応じて適切に宣言されていなければなりません /** * 何かのクラス、省略可能な何らかの値で初期化されます。 * @param {Object=} opt_value 何かの値(省略可)。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {Object|undefined} * @private */ this.myValue_ = value; } 上のコードはCompilerに対し、myValue_の値はオブジェクトかnull、あるいはundefinedのままであると伝えています。 省略可能なパラメータopt_valueの型が{Object=}と宣言されており、{Object|undefined}ではないことに注意してください。それは、省略可能なパラメータが undefined でありうることが定義上明らかだからです。そのことを明示的に宣言しても不都合はありませんが、本来必要ないだけでなく、コードも読みにくくなってしまいます。 最後に、nullを許すことと省略可能であることは直交的な性質である点に注意してください。以下の4つの宣言は全て異なった意味を持っています /** * 4つの引数を取ります。そのうち2つはnullを許容し、2つは省略可能です。 * @param {!Object} nonNull 必須(undefinedは不可)、nullは不可。 * @param {Object} mayBeNull 必須(undefinedは不可)、nullでもよい。 * @param {!Object=} opt_nonNull 省略可 (undefinedでもよい)、しかし値があるなら、 * それはnullであってはならない! * @param {Object=} opt_mayBeNull 省略可 (undefinedでもよい)、nullでもよい。 */ function strangeButTrue(nonNull, mayBeNull, opt_nonNull, opt_mayBeNull) { // ... }; 型定義 時々、型の指定が複雑になってしまうことがあります。例えば、DOM要素のコンテンツを受け取る関数があるとしましょう /** * @param {string} tagName * @param {(string|Element|Text|Array. Element |Array. Text )} contents * @return {Element} */ goog.createElement = function(tagName, contents) { ... }; @typedefタグを使うと、よく使われるデータ型の組み合わせを1つの型として定義することができます。例えばこうです /** @typedef {(string|Element|Text|Array. Element |Array. Text )} */ goog.ElementContent; /** * @param {string} tagName * @param {goog.ElementContent} contents * @return {Element} */ goog.createElement = function(tagName, contents) { ... }; テンプレート型 Compilerが行うテンプレート型のサポートは限定的です。それは関数リテラル内のthisの型を、thisを指定する引数の型と値の有無から推測するだけです。 /** * @param {function(this T, ...)} fn * @param {T} thisObj * @param {...*} var_args * @template T */ goog.bind = function(fn, thisObj, var_args) { ... }; // おそらくプロパティが存在しないという警告が出力されます。 goog.bind(function() { this.someProperty; }, new SomeClass()); // thisがundefinedであるという警告が出力されます。 goog.bind(function() { this.someProperty; }); 列挙型 訳注:2.28版以降列挙型に関する以下の説明は削除されていますが、コーディングルールの理解には必要と考え記載します。 /** * 3つの状態を値にもつ列挙型。 * @enum {number} */ project.TriState = { TRUE 1, FALSE -1, MAYBE 0 }; 列挙型は有効なデータ型の1つである点に注意して下さい。列挙型はパラメータの型指定などに使用できます。 /** * プロジェクトの状態を設定します。 * @param {project.TriState} state 新しいプロジェクトの状態 */ project.setState = function(state) { // ... };
https://w.atwiki.jp/suffix/pages/1139.html
FileSystemObjectを使うと色々なファイル操作が簡易に出来る。 参考に書いたサイトを見て、色々書いてみよう! よく使う例を記載する。 (例1)ドラッグ ドロップしたファイルを別の名前としてコピー var fs = new ActiveXObject("Scripting.FileSystemObject"); var arg = WScript.Arguments; fs.CopyFile(arg.item(0),fs.buildpath(fs.GetFile(WScript.ScriptFullName).ParentFolder,"test.txt")); (例2)ドラッグ ドロップしたファイルを読み込む ForReading = 1; var fs = new ActiveXObject("Scripting.FileSystemObject"); var arg = WScript.Arguments; var read_text = fs.OpenTextFile(arg.item(0),ForReading); while(!read_text.AtEndOfStream) { var text_line = read_text.ReadLine(); } (例3)フォルダ内のファイル一覧を取得する。 var fs = new ActiveXObject("Scripting.FileSystemObject"); var folder = fs.GetFolder("フォルダパス"); var files = new Enumerator(folder.Files); while (!files.atEnd()) { WScript.Echo(files.item()); files.moveNext(); } (例4)指定のファイルを出力したり読み込んだり。 /*出力方法*/ var fso = new ActiveXObject("Scripting.FileSystemObject"); var folder_path = fso.getParentFolderName(location.pathname); //パスの取得 var text_data = fso.CreateTextFile(ファイルパス,true,false); text_data.writeLine("test");//1行の書き込み text_data.close(); /*入力方法*/ var fsi = new ActiveXObject("Scripting.FileSystemObject"); var file = fs.OpenTextFile( "C /Temp/renso.txt", 1, true, 0); while( !file.AtEndOfStream ) { WScript.Echo(file.ReadLine()); } file.Close(); fsi = null; 参考: http //msdn.microsoft.com/ja-jp/library/cc428078.aspx http //d.hatena.ne.jp/nacookan/20080221/1203607060
https://w.atwiki.jp/suffix/pages/1150.html
var excel = new ActiveXObject("Excel.Application"); var book = excel.Workbooks.open( FileName="C ¥¥temp¥¥temp.xls", UpdateLinks = false, ReadOnly = true); var e = new Enumerator(book.sheets); for(e.moveFirst(); !e.End(); e.moveNext()) { var sheet = e.item(); if(sheet.Name.match(/sheet名/) { Wscript.Echo(sheet.Cells(0,1).Value); } } book.close(false); excel.Quit();
https://w.atwiki.jp/sampleisbest/pages/461.html
開発環境 メモ帳 実行環境 Windows 8.1 (64bit)
https://w.atwiki.jp/javascriptteam/pages/13.html
勉強系 JavaScript例文辞典 ゼロから始める「JavaScriptゲームの作り方」入門 AJAXについて勉強しよう 最後の「Ajaxについて勉強しよう」の内容は使わないかもだから、参考程度に。 -- J (2010-11-24 02 59 51) 名前 コメント